package com.boxuegu.controller;

import com.boxuegu.domain.Fruit;
import com.boxuegu.domain.User;
import com.boxuegu.service.AdminService;
import com.boxuegu.service.UserService;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class AdminController {
    private Scanner sc = new Scanner(System.in);
    private String choice;
    AdminService adminService = new AdminService();
    UserController userController = new UserController();
    UserService userService = new UserService();

    public AdminController() throws IOException {
    }

    public void start() throws IOException, ClassNotFoundException {
        lo:
        while (true) {
            System.out.println("=================欢迎来到水果超市管理系统=================");
            System.out.println("请输入您的选择：   ①管理用户   ②管理水果   ③退出   ");
            //接受用户键盘输入的选择
            choice = sc.next();
            switch (choice) {
                case "1":
                    //管理用户的方法
                    manageUser();
                    break;
                case "2":
                    //管理水果的方法
                    manageFruit();
                    break;
                case "3":
                    //退出
                    break lo;
                default:
                    System.out.println("您的输入有误，请重新输入！");
                    break;

            }
        }
    }

    //正确
    //管理用户的方法
    public void manageUser() throws IOException, ClassNotFoundException {
        lo:
        while (true) {
            System.out.println("请输入您的选择：   ①注册新用户   ②修改现有用户   ③查看现有用户   ④退出   ");
            choice = sc.next();
            switch (choice) {
                case "1":
                    //注册用户的方法
                    addUser();
                    break;
                case "2":
                    //修改现有用户的方法
                    setUser();
                    break;
                case "3":
                    //查看用户的方法
                    lookUser();
                    break;
                case "4":
                    //退出
                    break lo;
                default:
                    System.out.println("您的输入有误，请重新输入！");
                    break;

            }
        }
    }

    //正确
    //查看用户方法
    private void lookUser() throws IOException, ClassNotFoundException {
        ArrayList<User> users = adminService.findAllUser();
        if (users != null && users.size() != 0) {
            System.out.println("账号      密码      姓名     余额");
            for (User user : users) {
                System.out.println(user);
            }
        } else {
            System.out.println("暂无用户信息，请添加后查看");
        }
    }

    //正确
    //修改现有用户的方法
    private void setUser() throws IOException, ClassNotFoundException {
        String id;
        lo:
        while (true) {
            System.out.println("请输入用户ID（输入n返回）");
            id = sc.next();
            if (id.equals("n")) {
                break;
            } else {
                //判断用户id是否存在
                if (adminService.isExist(id)) {
                    choiceLo:
                    while (true) {
                        System.out.println("请输入您的选择：   ①充值用户余额   ②修改用户余额   ③修改用户名称   ④修改用户密码  ⑤修改用户全部信息  ⑥删除用户  ⑦退出");
                        choice = sc.next();
                        switch (choice) {
                            case "1":
                                chargeMoney(id);
                                break;
                            case "2":
                                modifyMoney(id);
                                break;  //如果输入了n，退出此次判断
                            case "3":
                                modifyUserName(id);
                                break;  //如果输入了n，退出此次判断
                            case "4":
                                modifyUserPassword(id);
                                break;  //如果输入了n，退出此次判断
                            case "5":
                                modifyUserInformation(id);
                                break;//如果输入了n，退出此次判断
                            case "6":
                                deleteUser(id);
                                return;//删除用户对象之后跳出该循环
                            case "7":
                                break lo;
                            default:
                                System.out.println("您的输入有误，请重新输入！");
                                break;
                        }
                    }
                } else {
                    System.out.println("该用户不存在，请确认后重新输入");
                }
            }
        }
    }

    //删除用户
    private void deleteUser(String id) throws IOException, ClassNotFoundException {
        System.out.println("确认删除请输入y，取消删除请输入n");
        while (true) {
            String choice = sc.next();
            if (choice.equals("y")) {
                adminService.deleteUser(id);
                System.out.println("删除成功");
                return;
            } else if (choice.equals("n")) {
                return;
            } else {
                System.out.println("输入错误，请输入y或者n");
            }
        }
    }

    //修改用户全部信息
    private void modifyUserInformation(String id) throws IOException, ClassNotFoundException {

        System.out.println("请输入修改后的密码（输入n返回）");
        String newpassword = sc.next();
        if (newpassword.equals("n")) {
            return;
        } else {
            System.out.println("请输入修改后的名称（输入n返回）");
            String newname = sc.next();
            if (newname.equals("n")) {
                return;
            } else {
                while (true) {
                    System.out.println("请输入修改后的金额（输入n返回）");
                    String newmoney = sc.next();
                    if (newmoney.equals("n")) {
                        return;
                    } else {

                        User user = null;
                        try {
                            user = new User(id, newpassword, newname, Double.parseDouble(newmoney));
                        } catch (NumberFormatException e) {
                            System.out.println("请输入正确的金额");
                            continue;
                        }
                        adminService.changeUser(user);
                        System.out.println("修改成功");
                        return;
                    }
                }
            }
        }
    }

    //修改用户密码
    private void modifyUserPassword(String id) throws IOException, ClassNotFoundException {

        System.out.println("请输入修改后的密码（输入n返回）");
        String password = sc.next();
        if (password.equals("n")) {
            return;
        } else {
            adminService.changePassword(id, password);
            System.out.println("修改成功");
            return;
        }
    }

    //修改用户名称
    private void modifyUserName(String id) throws IOException, ClassNotFoundException {
        System.out.println("请输入修改后的名称（输入n返回）");
        String name = sc.next();
        if (name.equals("n")) {
            return;
        } else {
            adminService.changeName(id, name);
            System.out.println("修改成功");
            return;
        }
    }

    //修改用户余额
    private void modifyMoney(String id) throws IOException, ClassNotFoundException {
        System.out.println("请输入修改后的金额（输入n返回）");
        while (true) {
            String setMoney = sc.next();
            if (setMoney.equals("n")) {
                return;
            } else {
                try {
                    adminService.changeMoney(id, Double.parseDouble(setMoney));
                    System.out.println("修改成功");
                    return;
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                } catch (NumberFormatException e) {
                    System.out.println("请输入正确的金额");
                }
            }
        }
    }

    //充值用户余额
    private void chargeMoney(String id) throws IOException, ClassNotFoundException {
        System.out.println("请输入要充值的金额（输入n返回）");
        String money = sc.next();
        while (true) {
            if (money.equals("n")) {
                return;
            } else {
                try {
                    adminService.addMoney(id, Double.parseDouble(money));
                    System.out.println("充值成功");
                    return;
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                } catch (NumberFormatException e) {
                    System.out.println("请输入正确的金额");
                }
            }
        }
    }

    //正确
    //注册用户的方法
    private void addUser() throws IOException, ClassNotFoundException { //注册用户的方法
        Scanner sc = new Scanner(System.in);
        User user = new User();
        String id;  //用户ID（账号）
        String password;  //用户密码
        String name; //用户姓名
        String money;//充值金额
        while (true) {
            System.out.println("请输入账号（输入n返回）");
            id = sc.next();
            if (id.equals("n")) {
                break;  //如果输入了n，退出此次判断
            } else {
                if (adminService.isExist(id)) {// 判断id是否存在
                    System.out.println("ID已存在，请重新输入");
                    continue;
                } else {
                    System.out.println("请输入密码（输入n返回）");
                    password = sc.next();
                    if (password.equals("n")) {
                        break;
                    } else {
                        System.out.println("请输入姓名（输入n返回）");
                        name = sc.next();
                        if (name.equals("n")) {
                            break;
                        } else {
                            System.out.println("请输入充值金额（输入n返回）");
                            money = sc.next();
                            if (money.equals("n")) {
                                break;
                            } else {
                                user.setId(id);
                                user.setMoney(Double.parseDouble(money));
                                user.setName(name);
                                user.setPassword(password);
                                adminService.addUser(user);
                                System.out.println("添加用户成功");
                                break;
                            }
                        }
                    }
                }
            }
        }
    }

    //正确
    //管理水果的方法
    public void manageFruit() throws IOException, ClassNotFoundException {
        lo:
        while (true) {
            System.out.println("请输入您的选择：   ①添加水果   ②修改水果数据   ③查看现有水果   ④退出   ");
            choice = sc.next();
            switch (choice) {
                case "1":
                    //添加水果的方法
                    addFruit();
                    break;
                case "2":
                    //修改水果数据的方法
                    setFruit();
                    break;
                case "3":
                    //查看水果数据的方法
                    userController.lookFruit();
                    break;
                case "4":
                    //退出
                    break lo;
                default:
                    System.out.println("您的输入有误，请重新输入！");
                    break;

            }
        }
    }

    //正确
    //修改水果数据的方法
    private void setFruit() throws IOException, ClassNotFoundException {
        ArrayList<Fruit> fruits = new ArrayList<Fruit>();
        userController.lookFruit();
        String id;
        lo:
        while (true) {
            System.out.println("请输入要修改的水果ID（输入n返回）");
            id = sc.next();
            if (id.equals("n")) {
                break;
            } else {
                //判断水果id是否存在
                if (adminService.isExistFruit(id)) {
                    while (true) {
                        System.out.println("水果名：" + adminService.getFruitName(id) + "---请选择您的操作：①修改价格   ②修改库存数量   ③修改水果全部信息  ④删除该水果  ⑤返回");
                        choice = sc.next();
                        switch (choice) {
                            case "1":
                                modifyFruitPrice(id);
                                break;
                            case "2":
                                modifyFruitAmount(id);
                                break;
                            case "3":
                                modifyFruitInformation(id);
                                break;
                            case "4":
                                deleteFruit(id);
                                return;
                            case "5":
                                //返回
                                break lo;
                            default:
                                System.out.println("您的输入有误，请重新输入！");
                                break;
                        }
                    }
                    //System.out.println("请输入用户ID（输入n返回）");
                } else {
                    System.out.println("该水果不存在，请确认后重新输入");
                }
            }
        }

    }

    //删除水果
    private void deleteFruit(String id) throws IOException, ClassNotFoundException {
        System.out.println("确认删除请输入y，取消删除请输入n");
        while (true) {
            String choice = sc.next();
            if (choice.equals("y")) {
                adminService.deleteFruit(id);
                System.out.println("删除成功");
                return;
            } else if (choice.equals("n")) {
                return;
            } else {
                System.out.println("输入错误，请输入y或者n");
            }
        }
    }

    //修改水果全部信息
    private void modifyFruitInformation(String id) throws IOException {
        System.out.println("请输入该水果新名字(输入n返回)");
        String newName = sc.next();
        if (newName.equals("n")) {
            return;
        } else {
            while (true) {
                System.out.println("请输入该水果新价格(输入n返回)");
                String newPrice = sc.next();
                if (newPrice.equals("n")) {
                    return;
                } else {
                    try {
                        Double.parseDouble(newPrice);
                    } catch (NumberFormatException e) {
                        System.out.println("请输入正确的价格");
                        continue;
                    }
                    while (true) {
                        System.out.println("请输入该水果新库存(输入n返回)");
                        String newAmount = sc.next();
                        if (newPrice.equals("n")) {
                            return;
                        } else {
                            try {
                                Integer.parseInt(newAmount);
                            } catch (NumberFormatException e) {
                                System.out.println("请输入正确的库存");
                                continue;
                            }
                            Fruit fruit = new Fruit(id, newName, Double.parseDouble(newPrice), Integer.parseInt(newAmount));
                            adminService.changeFruit(fruit);
                            System.out.println("修改成功");
                            return;
                        }
                    }
                }
            }
        }
    }

    //修改水果库存数量的方法
    private void modifyFruitAmount(String id) throws IOException {
        System.out.println("请输入该水果新库存数量(输入n返回)");
        while (true) {
            String amount = sc.next();
            if (amount.equals("n")) {
                return;
            } else {
                //根据id和传入的amount参数更改库存数量
                try {
                    adminService.changeFruitAmount(id, Integer.parseInt(amount));
                    System.out.println("修改成功");
                    return;
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (NumberFormatException e) {
                    System.out.println("请输入正确的库存数量");
                }
            }
        }
    }

    //修改水果价格的方法
    private void modifyFruitPrice(String id) throws IOException {
        while (true) {
            System.out.println("请输入该水果新价格(输入n返回)");
            String money = sc.next();
            if (money.equals("n")) {
                return;
            } else {
                try {
                    //根据id和传入的money数字更改水果的金额
                    adminService.changeFruitMoney(id, Double.parseDouble(money));
                    System.out.println("修改成功");
                    return;
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (NumberFormatException e) {
                    System.out.println("请输入正确的水果新价格");
                }
            }
        }
    }

    //正确
    //添加水果的方法
    private void addFruit() throws IOException, ClassNotFoundException {
        String id;
        String fruitName;
        String money;
        String fruitAmount;
        Fruit fruit = new Fruit();
        while (true) {
            System.out.println("请输入水果id（输入n返回）");
            id = sc.next();
            if (id.equals("n")) {
                break;  //如果输入了n，退出此次判断
            } else {
                if (adminService.isExistFruit(id)) {// 判断水果的id是否存在
                    System.out.println("该ID已存在，请重新输入");
                } else {
                    System.out.println("请输入水果名字（输入n返回）");
                    fruitName = sc.next();
                    if (fruitName.equals("n")) {
                        break;
                    } else {
                        System.out.println("请输入水果价格（输入n返回）");
                        money = sc.next();
                        if (money.equals("n")) {
                            break;
                        } else {
                            System.out.println("请输入水果库存数量（输入n返回）");
                            fruitAmount = sc.next();
                            if (fruitAmount.equals("n")) {
                                break;
                            } else {
                                fruit.setId(id);
                                fruit.setName(fruitName);
                                fruit.setPrice(Double.parseDouble(money));
                                fruit.setAmount(Integer.parseInt(fruitAmount));
                                adminService.addFruit(fruit);
                                System.out.println("添加成功");
                                break;
                            }
                        }
                    }
                }
            }
        }
    }

}

